#pragma once

#include <iostream>
#include <string>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>

// 1.判断系统时间

// 2与文件相关
// 2.1 文件是否存在
// 2.2 文件所在目录
// 2.3 创建目录
namespace log
{

    namespace util
    {
        class Date
        {
        public:
            static size_t NowTime()
            {

                return (size_t)time(nullptr);
            }
        };

        class File
        {
        public:
            static bool Exists(const std::string &pathname)
            {
                // 使用 access(name,F_OK)判断 无跨平台性
                // return access(name.c_str(),F_OK)==0;
                struct stat st;
                return (stat(pathname.c_str(), &st) == 0);
            }

            static std::string GetFileDirectory(const std::string &pathname)
            {
                if (pathname.empty())
                    return ".";

                size_t pos = pathname.find_last_of("/\\"); // 为了跨平台性windos/linux
                if (pos == std::string::npos)
                {
                    // 未找到 "/或\" 说明给的就是 文件的名字 abc.txt
                    return ".";
                }
                // ./a/b/c/d/e
                return pathname.substr(0, pos + 1); // 将/也算进去了
            }
            static void Mkdir(const std::string &pathname)
            {
                if(pathname.empty())
                {
                    return ;
                }
                if(Exists(pathname)) 
                    return;

                size_t pos=0,index=0;//index表示从哪里开始查找,pos表示'/'的位置
                //./a/b/c/d/e
                while(index<pathname.size())
                {
                   pos=pathname.find_first_of("/\\",index);
                   if(pos==std::string::npos)
                   {
                        mkdir(pathname.c_str(),0777);
                        return;
                   }
                   //   /a/b/ds/s
                   std::string parent_dir=pathname.substr(0,pos);
                   if(Exists(parent_dir))
                   {
                        index=pos+1;
                        continue;
                   }
                   mkdir(parent_dir.c_str(),0777);
                   index=pos+1;

                }
            }
        };

    }
}